/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package test;

import Services.AppService;
import dataBase.ConexionPostgre;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.io.*;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import mapeos.Archivo;
import utils.ArchUtils;

/**
 *
 * @author ivanpianetti
 */
public class MainImagenesDB {

    public static void main(String[] args) throws Exception {
        Connection conn = ConexionPostgre.getConnectionFactory();
        System.out.println("Ingrese a continuacion una opcion para realizar en la base de datos de imagenes:");
        System.out.println("1- Guardar");
        System.out.println("2- Recuperar");
        System.out.println("=>");
        BufferedReader opcion = new BufferedReader(new InputStreamReader(System.in));
        int unaOpc = Integer.parseInt(opcion.readLine());
        switch (unaOpc) {
            case 1: {
                System.out.println("**********************************");
                String filename = ArchUtils.seleccionarArchivo();
                if (filename != null && ArchUtils.getTipoArchivo(filename).equalsIgnoreCase(ArchUtils.tipoImagen)) {
                    File archFoto = new File(filename);
                    FileInputStream archInput = new FileInputStream(archFoto);
                    String query = ""
                            + " INSERT INTO "
                            + " archivo( nombre_archivo, id_padre, id_tipo, id_grupo, datos_archivo)"
                            + " VALUES ( ?, ?, ?, ?,?)";
                    PreparedStatement prepStat = conn.prepareStatement(query);
                    int i = 1;
                    prepStat.setString(i++, archFoto.getName());//nombre_archivo
                    prepStat.setInt(i++, 1);//id_padre
                    prepStat.setInt(i++, 2);//id_tipo
                    prepStat.setInt(i++, 1);//id_grupo
                    prepStat.setBinaryStream(i++, archInput, (int) archFoto.length());//datos_archivo
                    //
                    prepStat.executeUpdate();
                    System.out.println("Escritura exitosa!!!");
                    prepStat.close();
                    archInput.close();
                } else {
                    System.out.println("********NO ES UNA IMÁGEN*****");
                }
                System.exit(0);
            }
            case 2: {
                System.out.println("**********************************");
                Statement stat = conn.createStatement();
                ResultSet rSet = stat.executeQuery("SELECT id_archivo FROM archivo");
                String pathCarpeta = ArchUtils.guardarComoArchivo("Fotos PandoraBox-");
                rSet.close();
                stat.close();
                int nroImagen = 1;
                ArrayList<Archivo> archivos = new ArrayList<Archivo>();
                while (rSet.next()) {
                    archivos.add(AppService.getInstance().getArchivoService().getById(rSet.getInt("id_archivo")));
                }
                for (Archivo archToDownload : archivos) {
                    if (archToDownload != null) {
                        if (!archToDownload.isCarpeta()) {
                            String rutaArchivo = pathCarpeta + nroImagen + "." + ArchUtils.getExtencionArchivo(archToDownload.getNombreArchivo());
                            System.out.println("Guardar 1\n");
                            ArchUtils.guardarArchivo1(rutaArchivo, archToDownload);
                            System.out.println("Guardar 2\n");
                            ArchUtils.guardarArchivo2(rutaArchivo, archToDownload);
                            System.out.println("Guardar 3\n");
                            ArchUtils.guardarArchivo3(rutaArchivo, archToDownload);
                            System.out.println("Guardar 4\n");
                            ArchUtils.guardarArchivo4(rutaArchivo, archToDownload);
                            nroImagen++;
                        }
                    }
                }
            }
            System.exit(0);
        }
    }
}
